﻿using CREAPA.Dominio;
using CREAPA.Repositorio;
using CREAPA.RepositorioADO;
using CREAPA.UL.Web.Models;
using CrystalDecisions.CrystalReports.Engine;
using System;
using System.Collections.Generic;
using System.Configuration;
using System.Data;
using System.Data.SqlClient;
using System.IO;
using System.Linq;
using System.Web;
using System.Web.Mvc;

namespace CREAPA.UL.Web.Controllers
{
    public class RelatorioController : Controller
    {
        //private Contexto contexto;  
        private siscreaEntitiesBD db = new siscreaEntitiesBD();
        RelatorioRepositorioADO relADO = new RelatorioRepositorioADO();

        [Authorize]
        public ActionResult RelatorioOS()
        {
            string usu = User.Identity.Name;
            var permissao = new SelectList(db.FuncionarioPermissoes.Where(p => p.Login == usu && (p.Permissao == 1 || p.Permissao == 11)));

            if (permissao.Count() > 0)
            {
                var model = new Relatorio();

                ViewBag.Setor = new SelectList(db.Setors.Where(p => (p.PermiteOS == true)).OrderBy(p => p.Nome), "Id", "Nome");
                ViewBag.PessoaInteressado = new SelectList(db.Funcionarios.Join(db.Pessoas,
                                     p => p.Pessoa.Id, c => c.Id,
                                     (p, c) => new { p.Login, c.Ativo }).Where(m => (m.Ativo == true)), "Login", "Login");
                ViewBag.PessoaCadastrou = new SelectList(db.Funcionarios.Join(db.Pessoas,
                                     p => p.Pessoa.Id, c => c.Id,
                                     (p, c) => new { p.Login, c.Ativo }).Where(m => (m.Ativo == true)), "Login", "Login");

                return View(model);
            }
            else
            {
                TempData["notice"] = "Você não tem permissão para acessar essa página. É necessária a permissão: 0001";
                return RedirectToAction("../Os/Erro");
            }
        }

       
        [HttpPost]
        [ValidateAntiForgeryToken]
        public ActionResult RelatorioOS(Relatorio relatorio)
        {
            string usu = User.Identity.Name;
            FuncionarioRepositorioADO funcADO = new FuncionarioRepositorioADO();
            CREAPA.Dominio.Funcionario funcionario = new CREAPA.Dominio.Funcionario();
            funcionario = funcADO.ListarPorLogin(usu);


            if (ModelState.IsValid)
            {
                try
                {
                    ViewBag.Setor = new SelectList(db.Setors.Where(p => p.PermiteOS == true).OrderBy(p => p.Nome), "Id", "Nome");
                    ViewBag.PessoaInteressado = new SelectList(db.Funcionarios.Join(db.Pessoas,
                                p => p.Pessoa.Id, c => c.Id,
                                (p, c) => new { p.Login, c.Ativo }).Where(m => (m.Ativo == true)), "Login", "Login", relatorio.PessoaInteressado);
                    ViewBag.PessoaCadastrou = new SelectList(db.Funcionarios.Join(db.Pessoas,
                                 p => p.Pessoa.Id, c => c.Id,
                                 (p, c) => new { p.Login, c.Ativo }).Where(m => (m.Ativo == true)), "Login", "Login", relatorio.PessoaCadastrou);

                    var ListaDeRelatorioOs = relADO.ListarTotalOs(relatorio);

                    ViewBag.ListaDeRelatorioOs = ListaDeRelatorioOs;

                    return View();
                }
                catch (Exception ex)
                {
                    ViewBag.Setor = new SelectList(db.Setors.Where(p => p.PermiteOS == true).OrderBy(p => p.Nome), "Id", "Nome");
                    ViewBag.PessoaInteressado = new SelectList(db.Funcionarios.Join(db.Pessoas,
                                p => p.Pessoa.Id, c => c.Id,
                                (p, c) => new { p.Login, c.Ativo }).Where(m => (m.Ativo == true)), "Login", "Login", User.Identity.Name);
                    ViewBag.PessoaCadastrou = new SelectList(db.Funcionarios.Join(db.Pessoas,
                                 p => p.Pessoa.Id, c => c.Id,
                                 (p, c) => new { p.Login, c.Ativo }).Where(m => (m.Ativo == true)), "Login", "Login", User.Identity.Name);
                    TempData["notice"] = ex;
                    ModelState.AddModelError("", "Não foi possível gravar as alterações, tente novamente mais tarde, se o problema persistir, contate o administrador do sistema." + Environment.NewLine + "Erro: " + ex.Message);
                }
            }
            else
            {
                ViewBag.Setor = new SelectList(db.Setors.Where(p => p.PermiteOS == true).OrderBy(p => p.Nome), "Id", "Nome");
                ViewBag.PessoaInteressado = new SelectList(db.Funcionarios.Join(db.Pessoas,
                                p => p.Pessoa.Id, c => c.Id,
                                (p, c) => new { p.Login, c.Ativo }).Where(m => (m.Ativo == true)), "Login", "Login", User.Identity.Name);
                ViewBag.PessoaCadastrou = new SelectList(db.Funcionarios.Join(db.Pessoas,
                             p => p.Pessoa.Id, c => c.Id,
                             (p, c) => new { p.Login, c.Ativo }).Where(m => (m.Ativo == true)), "Login", "Login", User.Identity.Name);
            }
            return View(relatorio);
        }

        //[Authorize]
        //public ActionResult RelatorioGRCGeral()
        //{
        //    string usu = User.Identity.Name;
        //    var permissao = new SelectList(db.FuncionarioPermissoes.Where(p => p.Login == usu && (p.Permissao == 11 || p.Permissao == 18)));

        //    if (permissao.Count() > 0)
        //    {
        //        var model = new Relatorio();

        //        ViewBag.titulo = "Relatório de Atividades do GRC";

        //        //Setores do GRC: 13,114,113,112,8,106,70,72
        //        ViewBag.PessoaInteressado = new SelectList(db.Funcionarios.Join(db.Pessoas,
        //                    p => p.Pessoa.Id, c => c.Id,
        //                    (p, c) => new { p.Login, c.Ativo, p.IdSetor }).Where(m => (m.Ativo == true && (m.IdSetor == 13 || m.IdSetor == 114 ||
        //                        m.IdSetor == 113 || m.IdSetor == 112 || m.IdSetor == 8 || m.IdSetor == 106 || m.IdSetor == 70 ||
        //                        m.IdSetor == 72))).OrderBy(p => p.Login), "Login", "Login");

        //        return View(model);
        //    }
        //    else
        //    {
        //        TempData["notice"] = "Você não tem permissão para acessar essa página. É necessária a permissão: 0018";
        //        return RedirectToAction("../Os/Erro");
        //    }
        //}


        //[HttpPost]
        //[ValidateAntiForgeryToken]
        //public ActionResult RelatorioGRCGeral(Relatorio relatorio)
        //{
        //    float soma_ind = 0;
        //    float soma_setor = 0;
        //    float percentual = 0;//Pencentual da Pontuação do funcionário no Setor
        //    List<Relatorio> ListaDeRelatorio = new List<Relatorio>();

        //    if (ModelState.IsValid)
        //    {
        //        try
        //        {
        //            //Setores do GRC: 13,114,113,112,8,106,70,72
        //            ViewBag.PessoaInteressado = new SelectList(db.Funcionarios.Join(db.Pessoas,
        //                        p => p.Pessoa.Id, c => c.Id,
        //                        (p, c) => new { p.Login, c.Ativo, p.IdSetor }).Where(m => (m.Ativo == true && (m.IdSetor == 13 || m.IdSetor == 114 ||
        //                            m.IdSetor == 113 || m.IdSetor == 112 || m.IdSetor == 8 || m.IdSetor == 106 || m.IdSetor == 70 ||
        //                            m.IdSetor == 72))).OrderBy(p => p.Login), "Login", "Login",relatorio.PessoaInteressado);

        //           //Funcionário que possuem login do siscrea diferente do SITAC
        //           if (relatorio.PessoaInteressado == "luizpinto") relatorio.PessoaInteressado = "luizquadros";
        //           else if (relatorio.PessoaInteressado == "leonardomagalhães") relatorio.PessoaInteressado = "leonardomagalhaes";

        //           if (relatorio.Descricao == "F")//Exibir por funcionário
        //           {
        //               if (relatorio.Mes == 100)//data atual
        //               {
        //                   ListaDeRelatorio = relADO.ListarRelatorioProdutividade(relatorio.PessoaInteressado);
        //               }
        //               else//Relatório com base no mes ou ano informado
        //               {
        //                   ListaDeRelatorio = relADO.ListarRelatorioGRC(relatorio);
        //               }

        //               for (int i = 0; i < (ListaDeRelatorio.Count()); i++)
        //               {
        //                   CREAPA.Dominio.Relatorio rel = (CREAPA.Dominio.Relatorio)ListaDeRelatorio[i];
        //                   //Janeiro: total do funcionário     Fevereiro: assunto do protocolo
        //                   soma_ind = soma_ind + rel.Janeiro * Pontuacao(rel.Fevereiro);
        //                   soma_setor = soma_setor + rel.Total * Pontuacao(rel.Fevereiro);
        //               }
        //               percentual = (soma_ind / soma_setor) * 100;

        //               ViewBag.ListaGRC = ListaDeRelatorio;
        //               ViewBag.soma_ind = soma_ind;
        //               ViewBag.soma_setor = soma_setor;
        //               ViewBag.percentual = String.Format("{0:0.00}", percentual);
        //               //Seleciona a posição do fincionário no mês no setor
        //               if (relatorio.Mes != 100 && relatorio.Mes != 0)//Classificação somente aparece na consulta mensal
        //               {
        //                   Relatorio posicao = (Relatorio)relADO.PosicaoSetorGRC(relatorio)[0];
        //                   ViewBag.posicao = posicao.Janeiro;//A posição foi colocada no campo Janeiro
        //               }
        //           }
        //           else//Classificação de Pontuação
        //           {
        //               ListaDeRelatorio = relADO.PosicaoSetorGRC(relatorio);
        //               ViewBag.soma_ind = 0;
        //               ViewBag.soma_setor = 0;
        //               ViewBag.percentual = 0;
        //           }
                   

        //            ViewBag.ListaDeRelatorio = ListaDeRelatorio;

        //            if (relatorio.Descricao == "C")
        //                ViewBag.titulo = "Classificação da Pontuação no mês de " + DescricaoMes(relatorio.Mes.ToString()) + " de " + relatorio.Ano;
        //            else if (relatorio.Mes == 100)//data atual
        //                ViewBag.titulo = "Relatório de Atividades do GRC Hoje (" + relatorio.PessoaInteressado + ") - Atualizado em " + DateTime.Now;
        //            else if (relatorio.Mes == 0)//Não selecionou o mês
        //                ViewBag.titulo = "Relatório de Atividades (" + relatorio.PessoaInteressado + ") - no ano de " + relatorio.Ano;
        //            else
        //                ViewBag.titulo = "Relatório de Atividades (" + relatorio.PessoaInteressado + ") - no mês de " + DescricaoMes(relatorio.Mes.ToString()) + " de " + relatorio.Ano;

        //            return View();
        //        }
        //        catch (Exception ex)
        //        {
        //            //Setores do GRC: 13,114,113,112,8,106,70,72
        //            ViewBag.PessoaInteressado = new SelectList(db.Funcionarios.Join(db.Pessoas,
        //                        p => p.Pessoa.Id, c => c.Id,
        //                        (p, c) => new { p.Login, c.Ativo, p.IdSetor }).Where(m => (m.Ativo == true && (m.IdSetor == 13 || m.IdSetor == 114 ||
        //                            m.IdSetor == 113 || m.IdSetor == 112 || m.IdSetor == 8 || m.IdSetor == 106 || m.IdSetor == 70 ||
        //                            m.IdSetor == 72))).OrderBy(p => p.Login), "Login", "Login", relatorio.PessoaInteressado);
        //                               TempData["notice"] = ex;
        //            ModelState.AddModelError("", "Não foi possível gravar as alterações, tente novamente mais tarde, se o problema persistir, contate o administrador do sistema." + Environment.NewLine + "Erro: " + ex.Message);
        //        }
        //    }
        //    else
        //    {
        //        //Setores do GRC: 13,114,113,112,8,106,70,72
        //        ViewBag.PessoaInteressado = new SelectList(db.Funcionarios.Join(db.Pessoas,
        //                    p => p.Pessoa.Id, c => c.Id,
        //                    (p, c) => new { p.Login, c.Ativo, p.IdSetor }).Where(m => (m.Ativo == true && (m.IdSetor == 13 || m.IdSetor == 114 ||
        //                        m.IdSetor == 113 || m.IdSetor == 112 || m.IdSetor == 8 || m.IdSetor == 106 || m.IdSetor == 70 ||
        //                        m.IdSetor == 72))).OrderBy(p => p.Login), "Login", "Login", relatorio.PessoaInteressado);
        //     }
        //    return View(relatorio);

        //}

        [Authorize]
        public ActionResult RelatorioAtividadesGeral()
        {
            string usu = User.Identity.Name;
            var model = new Relatorio();
            ViewBag.titulo = "Relatório de Atividades do CREA-PA";

            var permissao = new SelectList(db.FuncionarioPermissoes.Where(p => p.Login == usu && (p.Permissao == 11 || p.Permissao == 18)));
                          
            if (permissao.Count() > 0)//Se possui a permissão, aparecerá a lista com todos os usuários, senão apenas o usuário que está logado
                    ViewBag.PessoaInteressado = new SelectList(db.Funcionarios.Join(db.Pessoas,
                            p => p.Pessoa.Id, c => c.Id,
                            (p, c) => new { p.Login, c.Ativo, p.IdSetor }).Where(m => (m.Ativo == true)).OrderBy(p => p.Login), "Login", "Login");
            else
                ViewBag.PessoaInteressado = new SelectList(db.Funcionarios.Join(db.Pessoas,
                            p => p.Pessoa.Id, c => c.Id,
                            (p, c) => new { p.Login, c.Ativo, p.IdSetor }).Where(m => (m.Ativo == true && m.Login == usu)).OrderBy(p => p.Login), "Login", "Login", usu);

                return View(model);
        }

        [HttpPost]
        [ValidateAntiForgeryToken]
        public ActionResult RelatorioAtividadesGeral(Relatorio relatorio)
        {
            float soma_ind = 0;
            List<Relatorio> ListaDeRelatorio = new List<Relatorio>();
            string usu = User.Identity.Name;

            if (ModelState.IsValid)
            {
                try
                {
                    var permissao = new SelectList(db.FuncionarioPermissoes.Where(p => p.Login == usu && (p.Permissao == 11 || p.Permissao == 18)));

                    if (permissao.Count() > 0)//Se possui a permissão, aparecerá a lista com todos os usuários, senão apenas o usuário que está logado
                        ViewBag.PessoaInteressado = new SelectList(db.Funcionarios.Join(db.Pessoas,
                                p => p.Pessoa.Id, c => c.Id,
                                (p, c) => new { p.Login, c.Ativo, p.IdSetor }).Where(m => (m.Ativo == true)).OrderBy(p => p.Login), "Login", "Login");
                    else
                        ViewBag.PessoaInteressado = new SelectList(db.Funcionarios.Join(db.Pessoas,
                                    p => p.Pessoa.Id, c => c.Id,
                                    (p, c) => new { p.Login, c.Ativo, p.IdSetor }).Where(m => (m.Ativo == true && m.Login == usu)).OrderBy(p => p.Login), "Login", "Login", usu);

                    //Funcionário que possuem login do siscrea diferente do SITAC
                    if (relatorio.PessoaInteressado == "luizpinto") relatorio.PessoaInteressado = "luizquadros";
                    else if (relatorio.PessoaInteressado == "leonardomagalhães") relatorio.PessoaInteressado = "leonardomagalhaes";
                    else if (relatorio.PessoaInteressado == "andréaalbuquerque") relatorio.PessoaInteressado = "andreaalbuquerque";
                    else if (relatorio.PessoaInteressado == "conceiçãodias") relatorio.PessoaInteressado = "conceicaodias";

                    if (relatorio.Mes == 100)//data atual
                    {
                        ListaDeRelatorio = relADO.ListarRelatorioAtividadesHoje(relatorio.PessoaInteressado);
                    }
                    else//Relatório com base no mes ou ano informado
                    {
                        ListaDeRelatorio = relADO.ListarRelatorioAtividades(relatorio);
                    }

                    //List<CREAPA.Dominio.Relatorio> lista = new List<CREAPA.Dominio.Relatorio>();
                       List<CREAPA.Dominio.Relatorio> lista2 = new List<CREAPA.Dominio.Relatorio>();//Armazena a classificação
                       List<CREAPA.Dominio.Relatorio> lista3 = new List<CREAPA.Dominio.Relatorio>();//Armazena as atividades para um determinado usuário
                       //CREAPA.Dominio.Relatorio rel_temp = new CREAPA.Dominio.Relatorio();
                       //rel_temp.PessoaInteressado = "joão";
                       //rel_temp.Total = 2;
                       //rel_temp.Fevereiro = 555;
                       //lista.Add(rel_temp);
                       //CREAPA.Dominio.Relatorio rel_temp1 = new CREAPA.Dominio.Relatorio();
                       //rel_temp1.PessoaInteressado = "Ana";
                       //rel_temp1.Total = 3;
                       //rel_temp1.Fevereiro = 555;
                       //lista.Add(rel_temp1);
                       //CREAPA.Dominio.Relatorio rel_temp2 = new CREAPA.Dominio.Relatorio();
                       //rel_temp2.PessoaInteressado = "Ana";
                       //rel_temp2.Total = 5;
                       //rel_temp2.Fevereiro = 555;
                       //lista.Add(rel_temp2);
                       //CREAPA.Dominio.Relatorio rel_temp3 = new CREAPA.Dominio.Relatorio();
                       //rel_temp3.PessoaInteressado = "Caio";
                       //rel_temp3.Total = 4;
                       //rel_temp3.Fevereiro = 555;
                       //lista.Add(rel_temp3);

                       //relatorio.PessoaInteressado = "Ana";

                       //Janeiro armazena o produto do códido do assunto com o total
                       //Fevereiro armazena o códido do assunto
                       //foreach (CREAPA.Dominio.Relatorio re in lista)

                       foreach (CREAPA.Dominio.Relatorio re in ListaDeRelatorio)
                       {
                           re.Janeiro = re.Total * Pontuacao(re.Fevereiro);
                       }

                       for (int i = 0; i < (ListaDeRelatorio.Count()); i++)
                       {
                           //Monta lista de classificação
                           if (!lista2.Exists(x => x.PessoaInteressado == ListaDeRelatorio[i].PessoaInteressado))
                           {
                               //lista[i].Janeiro = lista[i].Total * Pontuacao(lista[i].Fevereiro);
                               lista2.Add(ListaDeRelatorio[i]);
                           }
                           else
                           {
                               int k = lista2.FindIndex(x => x.PessoaInteressado.Contains(ListaDeRelatorio[i].PessoaInteressado));
                               //lista[i].Janeiro = lista[i].Total * Pontuacao(lista[i].Fevereiro);
                               float X = lista2[k].Janeiro;
                               float Y = ListaDeRelatorio[i].Janeiro;
                               lista2[k].Janeiro = X + Y;// lista2[k].Janeiro + lista[i].Janeiro;// +(lista[i].Total * Pontuacao(lista[i].Fevereiro));
                           }
                           //Monta lista de atividades do usuário
                           //if (re.PessoaInteressado == relatorio.PessoaInteressado)
                           //{
                           //    //re.Janeiro = re.Total *Pontuacao(re.Fevereiro);
                           //    lista3.Add(re);
                           //}
                       }

                       foreach (CREAPA.Dominio.Relatorio re in ListaDeRelatorio)
                       {
                           if (re.PessoaInteressado == relatorio.PessoaInteressado)
                           {
                               //re.Janeiro = re.Total *Pontuacao(re.Fevereiro);
                               lista3.Add(re);
                           }
                       }
                        //Ordena a lista pela pontuação (Janeiro)
                        lista2 = lista2.OrderByDescending(o => o.Janeiro).ToList();
                        int classif = lista2.FindIndex(x => x.PessoaInteressado.Contains(relatorio.PessoaInteressado)) ;//Retorna a classificação do funcionário

                        ViewBag.classsificacao = classif + 1;
                        if (classif != -1)
                            ViewBag.soma_ind = lista2[classif].Janeiro;
                        else
                            ViewBag.soma_ind = 0;

                        for (int i = 0; i < (lista2.Count()); i++)//Atribuindo a classificação do funcionário para exibição
                       {
                           lista2[i].Março = i+1;
                       }

                        //for (int i = 0; i < (ListaDeRelatorio.Count()); i++)
                        //{
                        //    CREAPA.Dominio.Relatorio rel = (CREAPA.Dominio.Relatorio)ListaDeRelatorio[i];
                        //    rel.Janeiro = rel.Total * Pontuacao(rel.Fevereiro);
                        //    soma_ind = soma_ind + rel.Total * Pontuacao(rel.Fevereiro);
                        //}
                        
                        //ViewBag.ListaGRC = ListaDeRelatorio;
                        //ViewBag.soma_ind = soma_ind;

                        if (permissao.Count() > 0)
                            ViewBag.ListaDeRelatorioClassificacao = lista2;
                        else
                            ViewBag.ListaDeRelatorioClassificacao = null;
                        ViewBag.ListaDeRelatorio = lista3;

                    if (relatorio.Mes == 100)
                        ViewBag.titulo = "Relatório de Atividades de Hoje (" + relatorio.PessoaInteressado + ") - Atualizado em " + DateTime.Now;
                    else
                        ViewBag.titulo = "Relatório de Atividades (" + relatorio.PessoaInteressado + ") - no mês de " + DescricaoMes(relatorio.Mes.ToString()) + " de " + relatorio.Ano;

                    return View();
                }
                catch (Exception ex)
                {
                    var permissao = new SelectList(db.FuncionarioPermissoes.Where(p => p.Login == usu && (p.Permissao == 11 || p.Permissao == 18)));

                    if (permissao.Count() > 0)//Se possui a permissão, aparecerá a lista com todos os usuários, senão apenas o usuário que está logado
                        ViewBag.PessoaInteressado = new SelectList(db.Funcionarios.Join(db.Pessoas,
                                p => p.Pessoa.Id, c => c.Id,
                                (p, c) => new { p.Login, c.Ativo, p.IdSetor }).Where(m => (m.Ativo == true)).OrderBy(p => p.Login), "Login", "Login");
                    else
                        ViewBag.PessoaInteressado = new SelectList(db.Funcionarios.Join(db.Pessoas,
                                    p => p.Pessoa.Id, c => c.Id,
                                    (p, c) => new { p.Login, c.Ativo, p.IdSetor }).Where(m => (m.Ativo == true && m.Login == usu)).OrderBy(p => p.Login), "Login", "Login", usu);
                    TempData["notice"] = ex;
                    ModelState.AddModelError("", "Não foi possível gravar as alterações, tente novamente mais tarde, se o problema persistir, contate o administrador do sistema." + Environment.NewLine + "Erro: " + ex.Message);
                }
            }
            else
            {
                ViewBag.PessoaInteressado = new SelectList(db.Funcionarios.Join(db.Pessoas,
                            p => p.Pessoa.Id, c => c.Id,
                            (p, c) => new { p.Login, c.Ativo, p.IdSetor }).Where(m => (m.Ativo == true)).OrderBy(p => p.Login), "Login", "Login", relatorio.PessoaInteressado);
            }
            return View(relatorio);

        }

        //[Authorize]
        //public ActionResult RelatorioGRCIndividual()
        //{
        //    //No primeiro carregamento da página são mostrados as atividades do DIA (SITAC)
        //    string usu = User.Identity.Name;
        //    var model = new Relatorio();

        //    float soma_ind = 0;
        //    float soma_setor = 0;
        //    float percentual = 0;//Pencentual da Pontuação do funcionário no Setor

        //    //Usuários diferentes no siscrea e sitac
        //    if (usu == "luizpinto") usu = "luizquadros";
        //    else if (usu == "leonardomagalhães") usu = "leonardomagalhaes";

        //    List<CREAPA.Dominio.Relatorio> ListaDeRelatorio = relADO.ListarRelatorioProdutividade(usu);

        //    for (int i = 0; i < (ListaDeRelatorio.Count()); i++)
        //    {
        //        CREAPA.Dominio.Relatorio rel = (CREAPA.Dominio.Relatorio)ListaDeRelatorio[i];
        //        //Janeiro: total do funcionário     Fevereiro: assunto do protocolo
        //        soma_ind = soma_ind + rel.Janeiro * Pontuacao(rel.Fevereiro);
        //        soma_setor = soma_setor + rel.Total * Pontuacao(rel.Fevereiro);
        //    }
        //    percentual = (soma_ind / soma_setor) * 100;

        //    ViewBag.ListaDeRelatorio = ListaDeRelatorio;
        //    ViewBag.soma_ind = soma_ind;
        //    ViewBag.soma_setor = soma_setor;
        //    ViewBag.percentual = String.Format("{0:0.00}", percentual);
        //    ViewBag.titulo = "Relatório de Atividades do GRC Hoje (" + usu + ") - Atualizado em " + DateTime.Now;

        //    return View(model);
        //}


        //[HttpPost]
        //[ValidateAntiForgeryToken]
        //public ActionResult RelatorioGRCIndividual(Relatorio relatorio)
        //{
        //    float soma_ind = 0;
        //    float soma_setor = 0;
        //    float percentual = 0;//Pencentual da Pontuação do funcionário no Setor
        //    string usu = User.Identity.Name;
        //    List<Relatorio> ListaDeRelatorio = new List<Relatorio>();

        //    if (ModelState.IsValid)
        //    {
        //        try
        //        {
        //            //Setores do GRC: 13,114,113,112,8,106,70,72
        //            ViewBag.PessoaInteressado = new SelectList(db.Funcionarios.Join(db.Pessoas,
        //                        p => p.Pessoa.Id, c => c.Id,
        //                        (p, c) => new { p.Login, c.Ativo, p.IdSetor }).Where(m => (m.Ativo == true && (m.IdSetor == 13 || m.IdSetor == 114 ||
        //                            m.IdSetor == 113 || m.IdSetor == 112 || m.IdSetor == 8 || m.IdSetor == 106 || m.IdSetor == 70 ||
        //                            m.IdSetor == 72))).OrderBy(p => p.Login), "Login", "Login", relatorio.PessoaInteressado);

        //            if (usu == "luizpinto") usu = "luizquadros";
        //            else if (usu == "leonardomagalhães") usu = "leonardomagalhaes";
        //            relatorio.PessoaInteressado = usu;
                    
        //            if (relatorio.Mes == 100)//data atual
        //            {
        //                ListaDeRelatorio = relADO.ListarRelatorioProdutividade(relatorio.PessoaInteressado);
        //            }
        //            else//Relatório com base no mes ou ano informado
        //            {
        //                ListaDeRelatorio = relADO.ListarRelatorioGRC(relatorio);
        //            }

        //            for (int i = 0; i < (ListaDeRelatorio.Count()); i++)
        //            {
        //                CREAPA.Dominio.Relatorio rel = (CREAPA.Dominio.Relatorio)ListaDeRelatorio[i];
        //                //Janeiro: total do funcionário     Fevereiro: assunto do protocolo
        //                soma_ind = soma_ind + rel.Janeiro * Pontuacao(rel.Fevereiro);
        //                soma_setor = soma_setor + rel.Total * Pontuacao(rel.Fevereiro);
        //            }
        //            percentual = (soma_ind / soma_setor) * 100;

        //            ViewBag.ListaGRC = ListaDeRelatorio;
        //            ViewBag.soma_ind = soma_ind;
        //            ViewBag.soma_setor = soma_setor;
        //            ViewBag.percentual = String.Format("{0:0.00}", percentual);
        //            //Seleciona a posição do fincionário no mês no setor
        //            if (relatorio.Mes != 100 && relatorio.Mes != 0)//Classificação somente aparece na consulta mensal
        //            {
        //                Relatorio posicao = (Relatorio)relADO.PosicaoSetorGRC(relatorio)[0];
        //                ViewBag.posicao = posicao.Janeiro;//A posição foi colocada no campo Janeiro
        //            }

        //            ViewBag.ListaDeRelatorio = ListaDeRelatorio;

        //            if (relatorio.Mes==0)
        //                ViewBag.titulo = "Relatório de Atividades (" + usu + ") - no ano de " + relatorio.Ano;
        //            else
        //                ViewBag.titulo = "Relatório de Atividades (" + usu + ") - no mês de " + DescricaoMes(relatorio.Mes.ToString()) + " de " + relatorio.Ano;
        //            return View();
        //        }
        //        catch (Exception ex)
        //        {
        //            //Setores do GRC: 13,114,113,112,8,106,70,72
        //            ViewBag.PessoaInteressado = new SelectList(db.Funcionarios.Join(db.Pessoas,
        //                        p => p.Pessoa.Id, c => c.Id,
        //                        (p, c) => new { p.Login, c.Ativo, p.IdSetor }).Where(m => (m.Ativo == true && (m.IdSetor == 13 || m.IdSetor == 114 ||
        //                            m.IdSetor == 113 || m.IdSetor == 112 || m.IdSetor == 8 || m.IdSetor == 106 || m.IdSetor == 70 ||
        //                            m.IdSetor == 72))).OrderBy(p => p.Login), "Login", "Login", relatorio.PessoaInteressado);
        //            TempData["notice"] = ex;
        //            ModelState.AddModelError("", "Não foi possível gravar as alterações, tente novamente mais tarde, se o problema persistir, contate o administrador do sistema." + Environment.NewLine + "Erro: " + ex.Message);
        //        }
        //    }
        //    else
        //    {
        //        //Setores do GRC: 13,114,113,112,8,106,70,72
        //        ViewBag.PessoaInteressado = new SelectList(db.Funcionarios.Join(db.Pessoas,
        //                    p => p.Pessoa.Id, c => c.Id,
        //                    (p, c) => new { p.Login, c.Ativo, p.IdSetor }).Where(m => (m.Ativo == true && (m.IdSetor == 13 || m.IdSetor == 114 ||
        //                        m.IdSetor == 113 || m.IdSetor == 112 || m.IdSetor == 8 || m.IdSetor == 106 || m.IdSetor == 70 ||
        //                        m.IdSetor == 72))).OrderBy(p => p.Login), "Login", "Login", relatorio.PessoaInteressado);
        //    }
        //    return View(relatorio);

        //}

        private string DescricaoMes(string Mes)
        {
            string descMes = "";

           switch (Mes)
            {
                case "1": descMes += "Janeiro "; break;
                case "2": descMes += "Fevereiro "; break;
                case "3": descMes += "Março "; break;
                case "4": descMes += "Abril "; break;
                case "5": descMes += "Maio "; break;
                case "6": descMes += "Junho "; break;
                case "7": descMes += "Julho "; break;
                case "8": descMes += "Agosto "; break;
                case "9": descMes += "Setembro "; break;
                case "10": descMes += "Outubro "; break;
                case "11": descMes += "Novembro "; break;
                case "12": descMes += "Dezembro "; break;
            }            

            return descMes;
        }

        //[Authorize]
        //public ActionResult RelatorioGRC()
        //{
        //    string usu = User.Identity.Name;
        //    float soma_ind = 0;
        //    float soma_setor = 0;
        //    float percentual = 0;//Pencentual da Pontuação do funcionário no Setor

        //    //Usuários diferentes no siscrea e sitac
        //    if (usu == "luizpinto") usu = "luizquadros";
        //    else if (usu == "leonardomagalhães") usu = "leonardomagalhaes";

        //    List<CREAPA.Dominio.Relatorio> ListaGRC = relADO.ListarRelatorioProdutividade(usu);

        //    for (int i = 0; i < (ListaGRC.Count()); i++)
        //    {
        //        CREAPA.Dominio.Relatorio rel = (CREAPA.Dominio.Relatorio)ListaGRC[i];
        //        //Janeiro: total do funcionário     Fevereiro: assunto do protocolo
        //        soma_ind = soma_ind + rel.Janeiro * Pontuacao(rel.Fevereiro);
        //        soma_setor = soma_setor + rel.Total * Pontuacao(rel.Fevereiro);                
        //    }
        //    percentual = (soma_ind / soma_setor) * 100;

        //    ViewBag.ListaGRC = ListaGRC;   
        //    ViewBag.soma_ind = soma_ind;
        //    ViewBag.soma_setor = soma_setor;
        //    ViewBag.percentual = String.Format("{0:0.00}", percentual);
            
        //    return View();
        //}

        public float Pontuacao(float assunto)
        {
            float ponto = 0;
            /*Cadastro de Registro de Empresa	4
            --Cadastro de Registro Profissional	1
            --Cadastro de Visto de Empresa	3
            --Total de Certidão - Observação Trâmite	9
            --Total de Trâmite de Certidão	7*/
            if (assunto == 4 || assunto == 1 || assunto == 3 || assunto == 9 || assunto == 7)
                ponto = 4;// --peso 4	
            else
                //--Cadastro de Visto Profissional
                //--Protocolo - RECADASTRAMENTO PROFISSIONAL	510
                //--CANCELAMENTO DE EMPRESA 913
                if (assunto == 2 || assunto == 510 || assunto == 913)
                    ponto = 3;
                else
                    //--Protocolo - ALTERAÇÃO DE REGISTRO PROVISÓRIO PARA DEFINITIVO	1355
                    //--Protocolo - ATUALIZAÇÃO DE DADOS CADASTRAIS - EMPRESA	1354
                    //--Protocolo - CANCELAMENTO DE ART	1153
                    //--Protocolo - INCLUSAO DE RESP. TECNICA	923
                    //--Protocolo - INTERRUPÇÃO DE REGISTRO - PROFISISONAL	1351
                    //--Protocolo - REGISTRO DE ART FORA DE ÉPOCA	1356
                    //--Protocolo - SEGUNDA VIA DE CARTEIRA	909
                    if (assunto == 1355 || assunto == 1354 || assunto == 1153 || assunto == 923 || assunto == 1351
                         || assunto == 1356 || assunto == 909)
                        ponto = 2;
                    else if (assunto == 5 || assunto == 6)
                        //--Total de ARTs Analisadas	5
                        //--Total de ARTs Recusadas	6
                        ponto = 0.5F;
                    else                       
                        ponto = 1;
            return ponto;
        }
        
    }
}
